#ifndef __M_LOG_H__
#define __M_LOG_H__

#include "logger.hpp"

namespace log
{
    //1.提供获取指定日志器的全局接口(避免用户自己操作单例对象)
    logger::ptr GetLogger(const std::string& name)
    {
        return loggermanager::GetInstance().GetLogger(name);
    }

    logger::ptr RootLogger()
    {
        return loggermanager::GetInstance().root_logger();
    }

    //2.使用宏函数对日志器进行代理(代理模式)
    #define DEBUG(fmt,...) Debug(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define INFO(fmt,...) Info(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define WARNING(fmt,...) Warning(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define ERROR(fmt,...) Error(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define FATAL(fmt,...) Fatal(__FILE__,__LINE__,fmt,##__VA_ARGS__)

    //3.提供宏函数,直接通过自定义日志器进行标准输出打印
    #define LOG_DEBUG(logger,fmt,...) (logger)->DEBUG(fmt,##__VA_ARGS__)
    #define LOG_INFO(logger,fmt,...) (logger)->INFO(fmt,##__VA_ARGS__)
    #define LOG_WARNING(logger,fmt,...) (logger)->WARNING(fmt,##__VA_ARGS__)
    #define LOG_ERROR(logger,fmt,...) (logger)->ERROR(fmt,##__VA_ARGS__)
    #define LOG_FATAL(logger,fmt,...) (logger)->FATAL(fmt,##__VA_ARGS__)

    //4.提供宏函数,直接通过默认日志器进行标准输出打印
    #define LOGD(fmt,...) LOG_DEBUG(log::RootLogger(),fmt,##__VA_ARGS__)
    #define LOGI(fmt,...) LOG_INFO(log::RootLogger(),fmt,##__VA_ARGS__)
    #define LOGW(fmt,...) LOG_WARNING(log::RootLogger(),fmt,##__VA_ARGS__)
    #define LOGE(fmt,...) LOG_ERROR(log::RootLogger(),fmt,##__VA_ARGS__)
    #define LOGF(fmt,...) LOG_FATAL(log::RootLogger(),fmt,##__VA_ARGS__)
}

#endif


